import axios from 'axios'
import Vue from 'vue'
import router from './router'

// baseURL根路径
var http = axios.create({
	baseURL:"http://localhost:3000/admin/api"
	// 如果api后加/，ItemEdit的:action="$http.defaults.baseURL + '/upload'" 要换成'upload，其他没问题，
	// 原因可能是绝对路径要写准确，但是一般请求，网址会自动添加/再进行post，get等请求，所以在login，CategoryEdit等组件进行axios请求不需要加/，如果这里不加/，请求时加/，也是正确的
	// 总之不加/，或者一方加/都没问题，两方加/也是没问题的，但是还是加吧（个人习惯）
})


// 加请求request拦截器
http.interceptors.request.use(config => {
	// console.log(config)

	// Do something before request is sent
	if (localStorage.token) {	// 如果localStorage.token存在（即服务端返回token，发送到客户端中），则请求头加上localStorage.token
		config.headers.Authorization = 'Bearer ' + localStorage.token  // headers（Request Headers） 请求头 Authorization 授权 后面的Bearer是规范，要加空格
	}
	return config
},err => {
	// Do something with request error
	return Promise.reject(err)
})

/*
登录一次，服务端返回token，客户端接收，把token添加到Request Headers （network）的Authorizations属性

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVkY2ZjYTBmNzNkOGQ3ZTM3YWU0ZTk1NiIsImlhdCI6MTU3MzkwNzMxN30.21NoMW569BBJCHWAvFY1A4btPvHarmDbsjWd2v50SB0
*/



// 加响应response拦截器interceptors
// (movie-server项目也写过，不过是用session写的)https://gitee.com/lijianxiong8/movie-server/commit/765b883d39865a8037bee55eb25d2a440153b8a7

// https://www.npmjs.com/package/axios  (ctrl+f搜intercept)
// http指上面axios创建的对象,使用箭头函数

http.interceptors.response.use(res => {
  return res
}, err => {
			// 这一步很重要，如果登录不成功，添加消息提示提醒用户原因
  if (err.response.data.message) {			//如果能接受到message，则添加到消息框中
    Vue.prototype.$message({			//element-ui的消息提示Message
      type: 'error',
      message: err.response.data.message		//data.message，这是错误返回的结果，正确的是response.data.message（只不过没有设计）
		})
		
		// 判断如果status == 401 ，重新登录（服务端授权中间件响应res发送状态码到客户端，认定没有登录，回到登录界面，具体看server/middleware/auth.js,三个判断，不行就返回401状态码）
    if (err.response.status === 401) {
			// this.$router.push('/login)
			// 直接引入router
      router.push('/login')
    }
  }

  return Promise.reject(err)
})
// 如果没有server/routes/admin/index.js的错误处理函数 143-151，则无法获取err.message即（err.response.data.message）

	/*
	console.log(err.response)
	
	err.response
		1.config: {url: "http://localhost:3000/admin/api/login", method: "post", 2.data: "{"username":"111","password":"11"}", headers: {…}, baseURL: "http://localhost:3000/admin/api", …}
		3.data: {message: "用户不存在"}
		43headers: {content-length: "29", content-type: "application/json; charset=utf-8"}
		5.request: XMLHttpRequest {readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, onreadystatechange: ƒ, …}
		6.status: 422
	*/


export default http